Raster image data, like that from a digital camera, a scanner, or a photo processing program is generally stored as a two dimensional array of pixels. Each pixel contains data “attributes” of the pixel. Attributes may include color information, grayscale information, and/or the like. Image processing generally includes modifying an image or a portion of an image to adjust its brightness, contrast, sharpness, magnification, color, or other attribute. Image processing may also include generating information such as histogram information. Generally, a user modifies an image by applying a filter. A filter may generate a new pixel value based on one or more pixel values. For example, a new pixel value for a particular pixel location may be generated as a combination of the old pixel value corresponding to that location and values of pixels at surrounding locations. A filter may also perform other types of processing such as adding pixels of different images, subtracting pixels of different images, interpolating pixels between existing pixels, decimating pixels to reduce size of an image, change brightness, change contrast, enhance edges in the image, etc.
A plurality of filters may be applied in series. As each filter is applied, data containing the new attributes of that pixel overwrite the previous data corresponding to that pixel, thus repeatedly modifying the original image data.
After a user has applied multiple filters to an image, a user cannot easily restore the original or previous pixel values if the user decides that one or more filters do not produce desired results. Some systems permit a user to “undo” effects of a last-applied filter.